/*在Golang中，有两个包提供了rand，分别为 "math/rand" 和 "crypto/rand", 对应两种应用场景
"math/rand" 包实现了伪随机数生成器。也就是生成 整形和浮点型
"crypto/rand" 包实现了用于加解密的更安全的随机数生成器*/

/*该包中根据生成伪随机数是是否有种子(可以理解为初始化伪随机数)，可以分为两类：
1、有种子。通常以时钟，输入输出等特殊节点作为参数，初始化。该类型生成的随机数相比无种子时重复概率较低。
2、无种子。可以理解为此时种子为1， Seek(1)。 // 如果无种子编译后运行的结果是定值
系统每次都会先用Seed函数初始化系统资源，如果用户不提供seed参数，则默认用seed=1来初始化，这就是为什么每次都输出一样的值的原因,
而且,Seed方法是并发安全的.
所谓种子,通俗理解可以理解为一个抽奖的奖池,我们自定义一个奖池,从我们的奖池中进行随机抽奖,种子就是我们奖池中的数据*/

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	fmt.Println(r.Int31())
	fmt.Println(rand.Int31()) //没有种子， 一旦编译过后(go build)，永远不变

	//或者如下方式使用种子
	rand.Seed(time.Now().UnixNano())
	fmt.Println(rand.Int31())

}
